package com.chain.BrotherExchange.data;

import com.chain.BrotherExchange.data.model.AddLegalTenderOrder;
import com.chain.BrotherExchange.data.model.AlipayInfo;
import com.chain.BrotherExchange.data.model.AnnouncementList;
import com.chain.BrotherExchange.data.model.Appeal;
import com.chain.BrotherExchange.data.model.ApplyUnlcokList;
import com.chain.BrotherExchange.data.model.AuthenticationNumber;
import com.chain.BrotherExchange.data.model.BankCardInfo;
import com.chain.BrotherExchange.data.model.BannerList;
import com.chain.BrotherExchange.data.model.BaseResponseModel;
import com.chain.BrotherExchange.data.model.ChargeMoney;
import com.chain.BrotherExchange.data.model.ChargeMoneyDetails;
import com.chain.BrotherExchange.data.model.ChattingRecords;
import com.chain.BrotherExchange.data.model.CheckVersion;
import com.chain.BrotherExchange.data.model.CoinAssetsDetails;
import com.chain.BrotherExchange.data.model.CoinAssetsList;
import com.chain.BrotherExchange.data.model.CoinOrderList;
import com.chain.BrotherExchange.data.model.CoinTypeList;
import com.chain.BrotherExchange.data.model.CountryCodeList;
import com.chain.BrotherExchange.data.model.EntrustQueue;
import com.chain.BrotherExchange.data.model.ExtractCoinAddressList;
import com.chain.BrotherExchange.data.model.ExtractMoneyDetails;
import com.chain.BrotherExchange.data.model.GetttestApi;
import com.chain.BrotherExchange.data.model.LegalTenderAssetsDetails;
import com.chain.BrotherExchange.data.model.LegalTenderAssetsList;
import com.chain.BrotherExchange.data.model.LegalTenderBalance;
import com.chain.BrotherExchange.data.model.LegalTenderDealList;
import com.chain.BrotherExchange.data.model.LegalTenderOrderDetails;
import com.chain.BrotherExchange.data.model.LegalTenderOrderList;
import com.chain.BrotherExchange.data.model.LegalTenderUnitPrice;
import com.chain.BrotherExchange.data.model.LegalTenderUserInfo;
import com.chain.BrotherExchange.data.model.MarketPair;
import com.chain.BrotherExchange.data.model.MoneyRecordModel;
import com.chain.BrotherExchange.data.model.MyInvitationCode;
import com.chain.BrotherExchange.data.model.OtherDetails;
import com.chain.BrotherExchange.data.model.PayPalInfo;
import com.chain.BrotherExchange.data.model.ProcedureFee;
import com.chain.BrotherExchange.data.model.Quotation;
import com.chain.BrotherExchange.data.model.QuotationTypes;
import com.chain.BrotherExchange.data.model.SingleCoinBalance;
import com.chain.BrotherExchange.data.model.TethNumberModel;
import com.chain.BrotherExchange.data.model.TokenTradeModel;
import com.chain.BrotherExchange.data.model.TradingVolume;
import com.chain.BrotherExchange.data.model.TransferDetailsList;
import com.chain.BrotherExchange.data.model.UploadFiles;
import com.chain.BrotherExchange.data.model.UserAreaCode;
import com.chain.BrotherExchange.data.model.UserAssets;
import com.chain.BrotherExchange.data.model.UserInfo;
import com.chain.BrotherExchange.data.model.UserIsAuthentication;
import com.chain.BrotherExchange.data.model.UserLogin;
import com.chain.BrotherExchange.data.model.UserPayment;
import com.chain.BrotherExchange.data.model.VisualQuotation;
import com.chain.BrotherExchange.data.model.WeChatPayInfo;

/**
 * 数据源接口
 */
public interface DataSource {

    interface DataCallback<T> {
        void onResult(T result);
    }

    /**
     * 首页广告图
     */
    void homeBannerList(DataCallback<BannerList> callback);

    /**
     * 公告列表
     */
    void announcementList(DataCallback<AnnouncementList> callback);

    /**
     * 交易所交易额
     */
    void tradingVolume(DataCallback<TradingVolume> callback);

    /**
     * SDC市场行情
     */
    void sdcQuotation(DataCallback<Quotation> callback);

    /**
     * 所有行情分类
     */
    void quotationType(DataCallback<QuotationTypes> callback);

    /**
     * 提币手续费
     */
    void procedureFee(DataCallback<ProcedureFee> callback);

    /**
     * 行情信息
     */
    void quotationInfo(int type, DataCallback<Quotation> callback);

    /**
     * 登录
     */
    void login(String mobilePhone, String password, DataCallback<UserLogin> callback);

    /**
     * 根据手机号获取区号
     */
    void getUserAreaByMobilePhone(String mobilePhone, DataCallback<UserAreaCode> callback);

    /**
     * 发送短信
     */
    void sendMessage(
            String region, String mobilePhone, int type, DataCallback<BaseResponseModel> callback
    );

    /**
     * 找回密码
     */
    void retrievePassword(
            String mobilePhone, String password, String code, DataCallback<BaseResponseModel> callback
    );

    /**
     * 用户资产
     */
    void userAssets(String token, int uid, DataCallback<UserAssets> callback);

    /**
     * 用户信息
     */
    void userInfo(String token, int uid, DataCallback<UserInfo> callback);

    /**
     * 我的邀请码
     */
    void myInvitationCode(String token, int uid, DataCallback<MyInvitationCode> callback);

    /**
     * 实名认证次数
     */
    void authenticationNumber(int uid, DataCallback<AuthenticationNumber> callback);

    /**
     * 实名认证
     */
    void realNamAuthentication(
            String token, int uid, String id, String name, String code,
            DataCallback<BaseResponseModel> callback
    );

    /**
     * 用户是否认证
     */
    void userIsAuthentication(int uid, String token, DataCallback<UserIsAuthentication> callback);

    /**
     * 修改交易密码
     */
    void modifyTransactionPassword(
            String token, int uid, String newPassword, String confirmPassword, String code,
            DataCallback<BaseResponseModel> callback
    );

    /**
     * 国家区号
     */
    void countryCodeList(DataCallback<CountryCodeList> callback);

    /**
     * 所有货币
     */
    void allCoinTypeList(DataCallback<CoinTypeList> callback);

    /**
     * 检查版本
     */
    void checkVersion(DataCallback<CheckVersion> callback);

    /**
     * 修改用户信息
     */
    void modifyUserInfo(
            String token, int uid, String name, String portrait, DataCallback<BaseResponseModel> callback
    );

    /**
     * 修改登录密码
     */
    void modifyLoginPassword(
            String token, int uid, String oldPassword, String newPassword, String confirmPassword,
            String code, DataCallback<BaseResponseModel> callback
    );

    /**
     * 添加提币地址
     */
    void addCoinAddress(
            String token, int uid, int id, String address, String remark, DataCallback<BaseResponseModel> callback
    );

    /**
     * 提币地址列表
     */
    void extractAddressList(String token, int uid, DataCallback<ExtractCoinAddressList> callback);

    /**
     * 删除提币地址
     */
    void deleteExtractAddress(String token, int uid, String id, DataCallback<BaseResponseModel> callback);

    /**
     * 取消提币
     */
    void cancelExtractMoney(String token, int uid, int id, DataCallback<BaseResponseModel> callback);

    /**
     * 币币资产列表
     */
    void coinAssetsList(String token, int uid, DataCallback<CoinAssetsList> callback);

    /**
     * 买卖盘
     */
    void entrustQueue(String symbol, DataCallback<EntrustQueue> callback);

    /**
     * 法币资产列表
     */
    void legalTenderAssetsList(String token, int uid, DataCallback<LegalTenderAssetsList> callback);

    /**
     * 币币订单
     */
    void coinOrderList(int uid, String token, int page, DataCallback<CoinOrderList> callback);

    /**
     * 未完成币币订单
     */
    void unfinishedCoinOrder(int uid, String token, int page, DataCallback<CoinOrderList> callback);

    /**
     * 撤销币币订单
     */
    void cancelCoinOrder(
            int uid, String token, String id, String sign, String nonce,
            DataCallback<BaseResponseModel> callback
    );

    /**
     * 币币明细
     */
    void coinAssetsDetailsList(int uid, String token, int page, DataCallback<CoinAssetsDetails> callback);

    /**
     * 充币明细
     */
    void chargeMoneyDetailsList(int uid, String token, int page, DataCallback<ChargeMoneyDetails> callback);

    /**
     * 提币明细
     */
    void extractMoneyDetailsList(int uid, String token, int page, DataCallback<ExtractMoneyDetails> callback);

    /**
     * 划转明细
     */
    void transferDetailsList(int uid, String token, int page, DataCallback<TransferDetailsList> callback);

    /**
     * 其他明细
     */
    void otherDetailsList(int uid, String token, int page, DataCallback<OtherDetails> callback);

    /**
     * 提币
     */
    void extractMoney(
            int uid, String token, String id, String address, String amount, String realAmount,
            String gas, String code, String password, String phone, DataCallback<BaseResponseModel> callback
    );

    /**
     * 币币转法币
     */
    void transferToCurrency(
            int uid, String token, String id, double number, DataCallback<BaseResponseModel> callback
    );

    /**
     * 充币
     */
    void chargeMoney(int uid, String token, String id, DataCallback<ChargeMoney> callback);

    /**
     * 单币种余额
     */
    void singleCoinBalance(int uid, String token, String id, DataCallback<SingleCoinBalance> callback);

    /**
     * 上传文件
     */
    void uploadFile(String base64, DataCallback<UploadFiles> callback);

    /**
     * 委托订单
     */
    void entrustOrder(
            int uid, String token, String symbol, int option, double onPrice, int type,
            double number, String sign, String nonce, DataCallback<BaseResponseModel> callback
    );

    /**
     * 用户注册
     */
    void register(
            String mobilePhone, String password, int region, String inviteCode, String code,
            DataCallback<BaseResponseModel> callback
    );

    /**
     * 极验接口1
     */
    void gettestApiFirst(String phone, DataCallback<GetttestApi> callback);

    /**
     * 极验接口2
     */
    void gettestApiSecond(
            String phone, String challenge, String validate, String seccode, int status,
            DataCallback<BaseResponseModel> callback
    );

    /**
     * 法币交易列表
     */
    void legalTenderDealList(
            int type, int tokenId, int page, DataCallback<LegalTenderDealList> callback
    );

    /**
     * 用户支付方式
     */
    void userPayment(int uid, String token, DataCallback<UserPayment> callback);

    /**
     * 添加/修改银行卡支付
     */
    void setBankPayment(
            int uid, String token, String name, String bankName, String bankAddress, String bankNumber,
            String confirmNumber, String code, DataCallback<BaseResponseModel> callback
    );

    /**
     * 添加/修改支付宝支付
     */
    void setAliPayPayment(
            int uid, String token, String name, String aliPay, String rqCode, String code,
            DataCallback<BaseResponseModel> callback
    );

    /**
     * 添加/修改微信支付
     */
    void setWeChatPayment(
            int uid, String token, String name, String weChat, String rqCode, String code,
            DataCallback<BaseResponseModel> callback
    );

    /**
     * 添加/修改payPal支付
     */
    void setPayPalPayment(
            int uid, String token, String name, String code, DataCallback<BaseResponseModel> callback
    );

    /**
     * 二级认证
     */
    void level2Certification(
            int uid, String token, String front, String reverse, String hand,
            DataCallback<BaseResponseModel> callback
    );

    /**
     * 法币资产详情
     */
    void legalTenderAssetsDetails(
            int uid, String token, int page, DataCallback<LegalTenderAssetsDetails> callback
    );

    /**
     * 法币划转到币币
     */
    void transferToLegalTender(
            int uid, String token, String id, double number, DataCallback<BaseResponseModel> callback
    );

    /**
     * 银行卡信息
     */
    void bankCardInfo(int uid, String token, DataCallback<BankCardInfo> callback);

    /**
     * 支付宝信息
     */
    void aliPayInfo(int uid, String token, DataCallback<AlipayInfo> callback);

    /**
     * 微信支付信息
     */
    void weChatPayInfo(int uid, String token, DataCallback<WeChatPayInfo> callback);

    /**
     * payPal账号信息
     */
    void payPalInfo(int uid, String token, DataCallback<PayPalInfo> callback);

    /**
     * 法币订单列表
     */
    void legalTenderOrderList(
            int uid, String token, int page, DataCallback<LegalTenderOrderList> callback
    );

    /**
     * 取消法币订单
     */
    void cancelLegalTenderOrder(
            int uid, String token, int id, int type, DataCallback<BaseResponseModel> callback
    );

    /**
     * 放行-法币
     */
    void confirmPayment(
            int uid, String token, int id, DataCallback<BaseResponseModel> callback
    );

    /**
     * 法币个人信息
     */
    void legalTenderUserInfo(int uid, DataCallback<LegalTenderUserInfo> callback);

    /**
     * 法币个人交易列表
     */
    void legalTenderUserDealList(
            int uid, int type, int page, DataCallback<LegalTenderDealList> callback
    );

    /**
     * 法币订单详情
     */
    void legalTenderOrderDetails(
            int uid, String token, String id, DataCallback<LegalTenderOrderDetails> callback
    );

    /**
     * 法币添加订单(购买/出售)
     */
    void legalTenderAddOrder(
            int uid, String token, int id, double number, DataCallback<AddLegalTenderOrder> callback
    );

    /**
     * 法币币种余额
     */
    void legalTenderBalance(
            int uid, String token, int tokenId, DataCallback<LegalTenderBalance> callback
    );

    /**
     * 法币申诉
     */
    void legalTenderAppeal(
            int uid, String token, String tokenId, String orderId, int opt, String tokenName,
            String image, String mark, String remarks, DataCallback<Appeal> callback
    );

    /**
     * 待放行
     */
    void orderRelease(
            int uid, String token, int orderId, String password, String sign, String nonce,
            DataCallback<BaseResponseModel> callback
    );

    /**
     * 取消申诉
     */
    void cancelAppeal(
            int uid, String token, int appealId, DataCallback<BaseResponseModel> callback
    );

    /**
     * 发布交易
     */
    void publishTransaction(
            int uid, String token, int type, int tokenId, String tokenName, double price,
            double number, double premium, double acceptPrice, double minPrice, double maxPrice,
            boolean isVerify, String pays, String remark, DataCallback<BaseResponseModel> callback
    );

    /**
     * 法币单价
     */
    void legalTenderUnitPrice(int tokenId, DataCallback<LegalTenderUnitPrice> callback);

    /**
     * 修改已发布交易单状态
     */
    void editMyPublishTransactionOrderStatus(
            int uid, String token, int id, int statusId, DataCallback<BaseResponseModel> callback
    );

    /**
     * 修改发布交易单状态
     */
    void editMyPublishTransactionOrder(
            int uid, String token, int id, double price, double number, double premium,
            double acceptPrice, double minPrice, double maxPrice, boolean isVerify, String pays,
            String remark, DataCallback<BaseResponseModel> callback
    );

    /**
     * k线数据
     */
    void visualQuotation(
            String symbol, String resolution, long fromDate, long toDate, DataCallback<VisualQuotation> callback
    );

    /**
     * 交易对数据
     */
    void marketPairData(String symbol, DataCallback<MarketPair> callback);

    /**
     * 聊天记录
     */
    void chattingRecords(
            int uid, String token, String orderId, DataCallback<ChattingRecords> callback
    );

    /**
     * STE交易资格
     */
    void getTokenTrade(
            int uid, String token, int tokenId, DataCallback<TokenTradeModel> callback
    );

    /**
     * 查询数量
     */
    void getTokenTethNumber(int uid, String token, DataCallback<TethNumberModel> callback);

    /**
     * 查询币币变更列表
     */
    void getMoneyRecord(
            int uid, String token, int page, int type, DataCallback<MoneyRecordModel> callback
    );

    /**
     * 锁仓
     */
    void lockToken(int uid, String token, int tokenId, DataCallback<BaseResponseModel> callback);

    /**
     * 申请节点
     */
    void applyNode(int uid, String token, DataCallback<BaseResponseModel> callback);

    /**
     * 申请解锁
     */
    void applyUnlock(int uid, String token, int tokenId, DataCallback<BaseResponseModel> callback);

    /**
     * 取消申请
     */
    void cancelApplyToken(int uid, String token, int id, DataCallback<BaseResponseModel> callback);

    /**
     * 申请解仓列表
     */
    void getApplyUnlockList(
            int uid, String token, int page, DataCallback<ApplyUnlcokList> callback
    );
}
